字符串
- 由0个或多个字符组成的有序字符序列 
- 单行字符串由一对单引号或一对双引号表示,如:”abc” 或 ‘abc’ 
- 多行字符串由三个单引号或三个双引号表示,如:’’’ Python 
 语言 ‘’’
- 字符串是字符的有序序列,可以用序号访问 
- 索引:s[N] 通过序号获取单个字符。如:”abc”[1]=”b” ; “abc”[-1]=”c” 
- 切片:s[N:M:K] 获取M(含,缺省为0)到N(不含,缺省为len)的步径为K(缺省为1,-1时为倒序)的子串。 
- 字符串支持转义字符 
| 功能 | 使用 | 
|---|---|
| 转义符表达特定字符的本意 | “这里有个双引号(\”)” 结果为 这里有个双引号(“) | 
| 转义符形成一些组合,表达一些不可打印的含义 | “\b”回退 “\n”换行(光标移动到下行首) “\r” 回车(光标移动到本行首) | 
- 字符串前导符r表示raw string,不支持转义,常用于正则表达式。 
- 字符串的编码方式 
 统一字符编码,即覆盖几乎所有字符的编码方式
 从0到1114111 (0x10FFFF),每个编码对应一个字符
 Python字符串中每个字符都是Unicode编码字符- 1 
 2
 3
 4- "1 + 1 = 2" + chr(10004) 
 '1 + 1 = 2✔'
 ord('♉')
 9801
- 字符串操作符 
| 操作符及使用 | 描述 | 
|---|---|
| x + y | 连接两个字符串x和y | 
| n x 或 x n | 复制n次字符串x | 
| x in s | 如果x是s的子串,返回True,否则返回False | 
- 字符串操作函数
| 函数及使用 | 描述 | 
|---|---|
| len(x) | 长度,返回字符串x的长度 | 
| str(x) | 任意类型x所对应的字符串形式 | 
| hex(x) 或 oct(x) | 整数x的十六进制或八进制小写形式字符串 | 
| chr(u) | x为Unicode编码,返回其对应的字符 (源于:character) | 
| ord(x) | x为字符,返回其对应的Unicode编码 (源于:ordinal) | 
- 字符串操作方法
| 方法及使用 | 描述 | 
|---|---|
| str.lower() 或 str.upper() | 返回字符串的副本,全部字符小写/大写 “AbCdEfGh”.lower() 结果为 “abcdefgh” | 
| str.split(sep=None) | 返回一个列表,由str根据sep被分隔的部分组成 “A,B,C”.split(“,”) 结果为 [‘A’,’B’,’C’] | 
| str.count(sub) | 返回子串sub在str中出现的次数 “an apple a day”.count(“a”) 结果为 4 | 
| str.replace(old, new) | 返回字符串str副本,所有old子串被替换为new “python”.replace(“n”,”n123.io”) 结果为 “python123.io” | 
| str.center(width[,fillchar]) | 字符串str根据宽度width居中,fillchar可选 “python”.center(20,”=”) 结果为 ‘=======python=======’ | 
| str.strip(chars) | 从str中去掉在其左侧和右侧chars中列出的字符 “= python= “.strip(“ =np”) 结果为”ytho” | 
| str.join(iter) | 在iter变量除最后元素外每个元素后增加一个str “,”.join(“12345”) 结果为 “1,2,3,4,5” #主要用于字符串分隔等 | 
- 字符串格式化 - %方法: - 1 
 2
 3
 4- >>> 'Hello, %s' % 'world' 
 'Hello, world'
 >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
 'Hi, Michael, you have $1000000.'- 如果只有一个 - %?,括号可以省略。- 常见的占位符有: 
 
| 占位符 | 替换内容 | 
|---|---|
| %d | 整数 | 
| %f | 浮点数 | 
| %s | 字符串 | 
| %x | 十六进制整数 | 
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数
用`%%`来表示一个`%`  
- str.format()(python2.6增加) - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32- #通过位置 
 '你好,我是{0}, 很高兴为您服务。您的资料显示您今年{1}岁'.format('小娜',18)
 '你好,我是{}, 很高兴为您服务。您的资料显示您今年{}岁'.format('小娜',18)
 '你好,我是{1}, 很高兴为您服务。您的资料显示您今年{0}岁。{1}与你同岁'.format(18, '小娜')
 #通过关键字参数
 '你好,我是{name}, 很高兴为您服务。您的资料显示您今年{age}岁'.format(name='小娜',age=18)
 class Person(object):
 def __init__(self,name,age):
 self.name = name
 self.age = age
 def __str__(self):
 return 'This guy is {self.name},is {self.age} old'.format(self=self)
 #通过对象属性
 class AssignValue(object):
 def __init__(self, value):
 self.value = value
 my_value = AssignValue(6)
 print('value 为: {0.value}'.format(my_value)) # "0" 是可选的
 #通过映射 list
 xNa = ['小娜', 18]
 '你好,我是{0[0]}, 很高兴为您服务。您的资料显示您今年{0[1]}岁'.format(xNa)
 #通过映射 dict
 xNa = {'name':'小娜', 'age':18}
 '你好,我是{name}, 很高兴为您服务。您的资料显示您今年{age}岁'.format(**xNa)
 # 可以使用大括号 **{}** 来转义大括号
 "{} 对应的位置是 {{0}}".format("runoob")- 槽内部的格式化配置:{ <参数标识> <格式控制标记>} - 格式控制标记 
| : | 填充 | 对齐 | 宽度 | , | . | 类型 | 
|---|---|---|---|---|---|---|
| 引导符号 | 用于填充的单个字符 | <左对齐 >右对齐 ^居中对齐 | 槽设定的输出宽度 | 数字的千位分隔符 | 浮点数小数精度或字符串最大输出长度 | 整数类型b,o,d,x,X 浮点数类型e,E,f 字符类型c,s | 
- f-string/F字符串(python3.6增加) - ==当中文字符宽度不够时,采用西文字符填充;中西文字符占用宽度不同。== - 中文的空格chr(12288) 
字节串
- 由0个或多个字节组成的有序序列,每字节对应值为0-255
- 字节串由前导符b或B与一对单引号/双引号或三个单引号/三个双引号表示,如:b”a\xf6” ,b’’’abcdef
 1234567890 ‘’’
- 0-255间非可打印字符用\xNN方式表示,N是一个十六进制字符
- 索引功能,与字符串相同
- 切片功能,与字符串相同
- 字节串操作符,与字符串相同
- 字节串处理函数,支持len()
- 字节串处理方法,与字符串类似,参数必须也是字节串。
- 如果要在网络上传输,或者保存到磁盘上,就需要把 - str变为以字节为单位的- bytes。
- bytes的每个字符都只占用一个字节。
- Unicode表示的 - str通过- encode()方法可以编码为指定的- bytes- 1 
 2- 'ABC'.encode('ascii') == b'ABC' 
 '中文'.encode('utf-8') == b'\xe4\xb8\xad\xe6\x96\x87'
- 纯英文的 - str可以用- ASCII编码为- bytes,内容是一样的
- 含有中文的 - str可以用- UTF-8编码为- bytes。含有中文的- str无法用- ASCII编码,因为中文编码的范围超过了- ASCII编码的范围,Python会报错。
- 在 - bytes中,无法显示为ASCII字符的字节,用- \x##显示。
- 从网络或磁盘上读取了字节流,读到的数据是 - bytes。- bytes变为- str,需要用- decode()- 1 
 2- b'ABC'.decode('ascii') =='ABC' 
 b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') == '中文'
- 如果 - bytes中只有一小部分无效的字节,可以传入- errors='ignore'忽略错误的字节:- 1 - b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') == '中'